﻿#include <iostream>

#include "SDL.h"
#include "SDL_image.h"
#undef main

int main(void)
{
    if(SDL_Init(SDL_INIT_EVERYTHING) == -1)
    {
        std::cout << SDL_GetError() << std::endl;
        return 1;
    }

    SDL_Window *window = nullptr;           //主窗口对象
    //SDL_WINDOW_SHOWN 设置窗口创建之后马上弹出
    window = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN);
    if(window == nullptr)
    {
        std::cout << SDL_GetError() << std::endl;
        return 1;
    }

    SDL_Renderer *render = nullptr;
    //-1表示让SDL自动选择适合我们指定的选项的显卡驱动
    //在这里我们指定了SDL_RENDERER_ACCELERATED，因为我们想
    //使用硬件加速的renderer，换句话说就是想利用显卡的力量。
    //我们还指定了 SDL_RENDERER_PRESENTVSYNC标志，因为我们
    //想要使用SDL_RendererPresent这个函数，这个函数将会以显示
    //器的刷新率来更新画面
    render = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);

    if(render == nullptr)
    {
        std::cout << SDL_GetError() << std::endl;
        return 1;
    }

    SDL_Surface *surface = nullptr;
    surface =  IMG_Load("E://workspace//FFMEPG//SDL//sources//color.png");
    if(surface == nullptr)
    {
        std::cout << SDL_GetError() << std::endl;
        return 1;
    }

    //要有效地利用硬件加速来绘制，我们必须把SDL_Surface
    //转化为SDL_Texture，这样renderer才能够绘制。
    SDL_Texture *texture = nullptr;
    texture = SDL_CreateTextureFromSurface(render, surface);
    SDL_FreeSurface(surface);           //释放内存

    //把Texture画到renderer上了。
    //1.我们先使用SDL_RenderClear来清空屏幕

    /*这里我们给SDL_RenderCopy传了两个NULL值。
     * 第一个NULL是一个指向源矩形的指针，也就是
     * 说，从图像上裁剪下的一块矩形；而
     * 另一个是指向目标矩形的指针。我们将NULL传
     * 入这两个参数，是告诉SDL绘制整个源图像
     * （第一个NULL），并把它画在屏幕上（0，0）
     * 的位置，并拉伸这个图像让它填满整个窗口（第二个NULL）*/
    SDL_RenderClear(render);

    //2.使用SDL_RenderCopy来把texture画上去
    SDL_RenderCopy(render, texture, nullptr, nullptr);

    //3.我们使用SDL_RenderPresent来更新屏幕的画面
    SDL_RenderPresent(render);

    SDL_Delay(2000);

    //4.释放内存
    SDL_DestroyTexture(texture);
    SDL_DestroyRenderer(render);
    SDL_DestroyWindow(window);

    SDL_Quit();
    return 0;
}
